package com.view;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import com.model.Proveedor;
import com.validators.Unique;

@ManagedBean
@ViewScoped
@SuppressWarnings("serial")
@Unique(entity = Proveedor.class, property = "nombre", daoName = "proveedorDAO", message = "El nombre del proveedor ya existe en el sistema")
public class ProveedorView extends BaseView implements Serializable {

	@NotNull(message = "Valor requerido")
	@Size(min = 1, max = 200, message = "El nombre del proveedor debe tener entre 1 y 200 caracteres")
	private String nombre;

	private String nombreFantasia;

	private String observaciones;

	@Size(min = 1, max = 100, message = "Se debe ingresar al menos un contacto")
	private List<ContactoView> listaContactos;

	private DireccionView direccion;

	private String dni;

	private String cuil;

	private String cuit;

	private List<ProductoCodigoView> listaProductoCodigo;
	
	private String tipoProveedor;

	public ProveedorView() {
		this(null, null, null, null, new ArrayList<ContactoView>(),
				new DireccionView(), null, null, null,
				new ArrayList<ProductoCodigoView>(), null);
	}

	public ProveedorView(Long id, String nombre, String nombreFantasia,
			String observaciones, List<ContactoView> listaContactos,
			DireccionView direccion, String dni, String cuil, String cuit,
			List<ProductoCodigoView> listaProductoCodigo, String tipoProveedor) {
		super();
		this.id = id;
		this.nombre = nombre;
		this.nombreFantasia = nombreFantasia;
		this.observaciones = observaciones;
		this.listaContactos = listaContactos;
		this.direccion = direccion;
		this.dni = dni;
		this.cuil = cuil;
		this.cuit = cuit;
		this.listaProductoCodigo = listaProductoCodigo;
		this.tipoProveedor = tipoProveedor;
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getNombreFantasia() {
		return nombreFantasia;
	}

	public void setNombreFantasia(String nombreFantasia) {
		this.nombreFantasia = nombreFantasia;
	}

	public String getObservaciones() {
		return observaciones;
	}

	public void setObservaciones(String observaciones) {
		this.observaciones = observaciones;
	}

	public List<ContactoView> getListaContactos() {
		return listaContactos;
	}

	public void setListaContactos(List<ContactoView> listaContactos) {
		this.listaContactos = listaContactos;
	}

	public DireccionView getDireccion() {
		return direccion;
	}

	public void setDireccion(DireccionView direccion) {
		this.direccion = direccion;
	}

	public String getDni() {
		return dni;
	}

	public void setDni(String dni) {
		this.dni = dni;
	}

	public String getCuil() {
		return cuil;
	}

	public void setCuil(String cuil) {
		this.cuil = cuil;
	}

	public String getCuit() {
		return cuit;
	}

	public void setCuit(String cuit) {
		this.cuit = cuit;
	}

	public List<ProductoCodigoView> getListaProductoCodigo() {
		return listaProductoCodigo;
	}

	public void setListaProductoCodigo(
			List<ProductoCodigoView> listaProductoCodigo) {
		this.listaProductoCodigo = listaProductoCodigo;
	}

	@Override
	public Object clone() throws CloneNotSupportedException {
		return new ProveedorView(id, nombre, nombreFantasia, observaciones,
				listaContactos, direccion, dni, cuil, cuit, listaProductoCodigo, null);
	}

	public String getTipoProveedor() {
		return tipoProveedor;
	}

	public void setTipoProveedor(String tipoProveedor) {
		this.tipoProveedor = tipoProveedor;
	}

}
